package com.luzhikun.Listener.httpSessionActivationListener;

import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
import java.io.Serializable;
import java.util.Objects;

/**
 * @Author Rookie Coder
 * @Description 八大组件之HttpSessionActivationListener
 * @Date 实体类除了要实现HttpSessionActivationListener接口，还要实现Serializable接口
 * <p>
 * 该监听器用于监听Session中存放的指定对象的钝化与活化
 * <p>
 * 钝化是指将内存中的数据写入到硬盘中
 * 活化是指将硬盘中的数据恢复到内存中
 * <p>
 * 当用户正在访问的页面或该页面所在的服务器由于各种原因被停掉，然后又在短时间内重启
 * 此时用户在访问时Session是不能被丢掉的，在应用关闭之前，需要将数据写入到硬盘中
 * 再重启后应可以立即恢复Session中的数据，这就称为Session的活化与钝化
 **/
public class SessionActivationListener implements HttpSessionActivationListener, Serializable {
    private String name;
    private int age;


    public SessionActivationListener() {
    }

    public SessionActivationListener(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof SessionActivationListener)) return false;
        SessionActivationListener that = (SessionActivationListener) o;
        return age == that.age && Objects.equals(name, that.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }

    @Override
    public String toString() {
        return "HttpSessionBinDingTest{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    // 当当前对象被活化(硬盘中的数据恢复到内存中)时会触发此方法
    @Override
    public void sessionDidActivate(HttpSessionEvent se) {
//        HttpSessionActivationListener.super.sessionDidActivate(se);
    }

    // 当当前对象被钝化(内存中的数据写入到硬盘中)时会触发此方法
    @Override
    public void sessionWillPassivate(HttpSessionEvent se) {
//        HttpSessionActivationListener.super.sessionWillPassivate(se);
    }
}
